md5 collision

题目

http://ctf.nuptzj.cn/challenges#md5%20collision

http://chinalover.sinaapp.com/web19/

php <?php $md51 = md5('QNKCDZO'); $a = @$_GET['a']; $md52 = @md5($a); if(isset($a)){ if ($a != 'QNKCDZO' && $md51 == $md52) { echo "nctf{*****************}"; } else { echo "false!!!"; }} else{echo "please input a";} ?>

解答思路

  • 本题考到了php的弱类型比较,当两个值使用==进行比较时,只是比较变量的值,而不会去比较变量的类型,md5('QNKCDZO')的hash值为 0e830400451993494058024219903391 ,对于 0ed+ 类型的数字,==会认为该值为0,所以只需满足md5($a)的值为0ed+类型即可满足条件,并且$a != 'QNKCDZO',这里列出一些符合条件的值:

php var_dump(md5('240610708') == md5('QNKCDZO')); var_dump(md5('aabg7XSs') == md5('aabC9RqS')); var_dump(sha1('aaroZmOk') == sha1('aaK1STfY')); var_dump(sha1('aaO8zKZF') == sha1('aa3OFF9m')); var_dump('0010e2' == '1e3'); var_dump('0x1234Ab' == '1193131'); var_dump('0xABCdef' == ' 0xABCdef');

解题步骤

  1. 输入参数$a=240610708得到flag

漏洞挖掘思路

自动化解析

  • 判断题目特征:web php md5 collision
  • 设定题目难度等级level为simple
  • 提交相应符合要求的字符串